世界最大的色情网站是如何架构和处理数据量的
云头条“智囊团”每晚8点分享,因时差原因,Bin 8:30进行了分享,感谢ing
大家好,我在加拿大Mindgeek公司工作,为了分享,早起了会 :)
这是主要的网站,别让坐板凳的朋友失望(因涉及中国法律,此处省略。。。。)
公司共1千余人,大概在全球7个地点有办事处,最大的地点在加拿大montreal,由于业务的原因,流量大是肯定的了
网站主要区分为两类,收费网站和免费网站
收费网站都是职业的,免费网站基本上一半一半吧
职业演员一般都是从洛杉矶拍摄的,有时候公司年会请比较著名的pornstar前来助兴
.......
OK, 刚才说到,公司的网站流量比较大,每天大概有大概接近1个亿不同IP地址访问
我们组基本上负责后台的数据收集,分析和处理,我们有合作伙伴,机房分布在美国纽约,芝加哥和欧洲阿姆斯特丹,所以服务器的事情我们不怎么操心,但是我们也有些业务使用了AWS和Google GCE
话题好大,我就介绍一下几个项目吧
Processing Cluster,这是我主持开发的一个项目
主要负责收集,分析处理公司所有的日志文件,系统设计的目标是没有SPOF
可扩展性
保证没有任何日志,包括没有任何一条记录丢失
在开发设计这个系统时,我借鉴了Maper reducer的部分思路,把系统设计为分布式的多个模块并发处理的模式
Mark一下,如何保证没有数据丢失
模块主要为Downloader, Parser, Publisher .....
为保证数据不丢失,我起的的名字是 file transactional feature
就是如果数据最终不能成功处理,那么整个事务中所有的文件都会被一次性回滚,然后会自动被重新处理
大家知道除了ETL,大多数处理文件更专注于如何聚合,高效聚合
所以我在设计开发时,进行了3层的聚合,分布在三个不同的部件中,最终保证最优的聚合,保证数据处理后能基本达到最小的尺寸
同时系统支持了多种输出模式,比如数据库MySQL,PostgreSQL,SQLserver
NoSQL 的Elasticsearch,AWS DynamoDB, Google BigQuery
文件模式输出为CSV
现在这套系统大概分布在10台机器上,每天大概处理10TB文件,250亿条记录左右,系统处理大概延时为1~10分钟左右
系统配置为界面配置,只要配置文件类型,地点,输入格式,输出格式和输出地点即可
每个模块都有自己的心跳,如果某个模块由于种种原因失效,崩溃,监控系统会自动重启这个模块,同时由于模块崩溃所造成的文件没有处理完毕,将会被自动被相同模块的其他Instances所接管
文件处理的大小,最小从几十K的小文件到十几GB的大文件皆可,也可以直接处理压缩文件
配发一张监控系统监控处理流量的截图
一张很久前画的老图了,方便理解
刚才讲的这个项目主要是基于文件处理的,毕竟都是有延迟的,所以我们又开发了基于流处理的另一个项目,起名叫做lightning
在lightning项目中,不同于ProcessingCluster,纯Java home made。Lightning使用了大量的open source
其实我们也尝试使用了AKKA和Storm,但是最终选用了Samza 配合Kafka,来保证数据的安全和完整性,毕竟这两者都来自LinkedIn,配合起来更加稳定
这个是Lightning数据处理的流程
在当前系统下,我们每天的流数据处理量大概是20亿条记录,数据延时下降到了1到3秒
然后我们有另一个项目,MVT (multivariatetesting)
实时的做 A/B/C/... 测试
还有项目是Fraud detection
检查fraud,我们这个行业,fraud还是很多的
有人比如买了账号,想共享给他人,我们可以检测到,这个是最基本的,系统有knowledge base,同时可以学习这个人的习惯和属性,比如客户端的属性,比如这个人的偏好,然后如果某天这个人的登陆location,客户端,甚至癖好有了很大的变化,我们会计算偏差值,按照比重判断这个人是不是账户本人
这些都是我们底层处理系统所能提供的能力,也是为什么我一开始介绍处理的项目了
关于MVT,我们会在每个客户记录cookie,确认测试人群
然后这些人群的内容会有所不同,同时web在load页面时,比如layout,content或者style会根据相关的variate id返回不同的data
然后记录用户的操作,最终可以统计bounce rate,还有页面浏览量,session length 等
关于流处理和文件处理还是不太一样,关于敏感数据,比如财务数据,我们还不能保证100%的不丢失,即使是kafka 和samza,所以文件方式处理始终是最安全的方式,同时很多文件处理并不要求很高的实时性,所以在一定的时间内,文件的稳定处理是不会被替代掉的
我们还有项目叫做 user profiling
这个项目是为匿名登录用户创建用户资料
这个tracking是跨我们公司所有的网站的,当时咨询公司的法律部门,这个属不属于侵犯隐私,但是告知还好,基本灰色地带吧,加上选择cookie时会有若干policy,你选了就好了
很多人都喜欢用隐私的浏览器,关闭后整个清空,那cookie就不好用了
比如头条兄喜欢日韩,那我们知道后,就会对他只投放日韩的广告,这样来提高广告的转化率
为此,我们和bluecava的公司合作过,侦测用户的信息,不依赖cookie,基本上是你所有能得到的客户端信息的一个聚合,包括浏览器,OS,屏幕大小,字体的组合,但是效果并不是很理想
我再给大家发一个我画的一个汇总图吧
这个基本上涵盖了我们的内容,但是这个图大概是几个月前我做的,现在还有些小的调整和技术的变更,但不影响理解
问题:
1、有考虑用spark么?
答:考虑过,我们使用了Spark SQL,但是在我们特定的环境下,性能比Tez差很多,所以弃用了Spark SQL
2、第一个项目和第二个项目的场景分别是什么?
答:我们做这些是为了什么,刚才我说的项目都是关于数据处理的,那基础打好了,我们就可以在基础上做我们想做的项目了,我们有个项目叫做Vortex,这个项目的目的是开发类似于google analytics 的分析报表,基于我们的流量,是无法使用Google Analytics的,所以我们自己开发了Vortex,客户端使用JS library内嵌到网页中发送events,主要是流量;Google只有在流量每月低于2千万的流量才可以免费使用,如果高于这个值就要收费,而且费用还很高,而且一个很让sales烦躁的是,数据一直都是sampling数据,我们是自己开发,为自己的sales量身定做,我想这个就是优势吧,当然对公司内部而言;我们在Google 之上又增加了新的功能,比如Generic Attributes,我们在Google 之上又增加了新的功能,比如Generic Attributes
这是昨晚11:30 左右的截图,第一行是系统更新的实时数据处理量
感谢Bin的分享~~~
关于“智囊团”云计算领域讨论群,周一至周五晚8点按照入群顺序,分享行业干货,进行讨论。入群需实名制。有兴趣可以加微信:aclood